const rs = require('randomstring');
const config = require('../config/index');
const md5 = require('md5');
const convert = require('xml-js');

module.exports = {
    randomString:()=>{
        return rs.generate(32);
    },
    getSign:(M)=>{
        // 1. 设所有发送或者接收到的数据为集合M

         // 2. 将集合M内非空参数值的参数按照参数名ASCII码从小到大排序（字典序），
        const arr = Object.keys(M).sort();

        // 3. 使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串stringA。
        let stringA = "";

        arr.forEach(val=>{
            stringA += `${val}=${M[val]}&`
        })
        // 4. 在stringA最后拼接上key得到stringSignTemp字符串，
        let stringSignTemp = stringA + "key=" + config.key;
        // 5. 并对stringSignTemp进行MD5运算，
        // 6. 再将得到的字符串所有字符转换为大写，得到sign值signValue。
        let signValue = md5(stringSignTemp).toUpperCase();
        // 得到签名信息
        return signValue;
    },
    getXml(M,sign){
        const obj = {
            xml: {
                ...M,
                sign
            }
        }
        const xml = convert.js2xml(obj,{
            compact: true
        })
        return xml;
    },
    xml2js (xml) {
        const obj = convert.xml2js(xml,{
            compact: true,
            textKey: 'value',
            cdataKey: 'value'
        })
        return obj;
    }
}